Адміністрація вирішила продати даний сайт. За детальною інформацією звертайтесь за адресою: rozrahu@gmail.com

Програма обчислення факторіалу

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
УІ
Кафедра:
Не вказано

Інформація про роботу

Рік:
2013
Тип роботи:
Лабораторна робота
Предмет:
Архітектура комп’ютерів та комп’ютерних систем

Частина тексту файла

МІНІСТЕРСТВО ОСВІТИ, НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”  Лабораторна робота № 6 з дисципліни "Архітектура комп’ютерів ч.2" Львів – 2013 Тема: Програма обчислення факторіалу Мета : Дослідити техніку конвеєрного виконання програми обчислення факторіалу Хід роботи У даній лабораторній роботі досліджується програма, що виконує обчислення факторіалу числа n (n – вводиться користувачем з клавіатури) Факторіал натурального числа - добуток натуральних чисел від одиниці до n включно, позначається n!  Базисна версія програми, що буде симулюватися Файл Fact.s (власне обчислення) .data Prompt: .asciiz "An integer value >1 : " PrintfFormat: .asciiz "Factorial = %g\n\n" .align 2 PrintfPar: .word PrintfFormat PrintfValue: .space 8 .text .global main main: ;*** Read value from stdin into R1 addi r1,r0,Prompt jal InputUnsigned ;*** init values movi2fp f10,r1 ;R1 -> D0 D0..Count register cvti2d f0,f10 addi r2,r0,1 ;1 -> D2 D2..result movi2fp f11,r2 cvti2d f2,f11 movd f4,f2 ;1-> D4 D4..Constant 1 ;*** Break loop if D0 = 1 Loop: led f0,f4 ;D0<=1 ? bfpt Finish ;*** Multiplication and next loop multd f2,f2,f0 subd f0,f0,f4 j Loop Finish: ;*** write result to stdout sd PrintfValue,f2 addi r14,r0,PrintfPar trap 5 trap 0 Файл INPUT.s (допоміжна програма для введення даних) .data ;*** Data for Read-Trap ReadBuffer: .space 80 ReadPar: .word 0,ReadBuffer,80 ;*** Data for Printf-Trap PrintfPar: .space 4 SaveR2: .space 4 SaveR3: .space 4 SaveR4: .space 4 SaveR5: .space 4 .text .global InputUnsigned InputUnsigned:;*** save register contents sw SaveR2,r2 sw SaveR3,r3 sw SaveR4,r4 sw SaveR5,r5 ;*** Prompt sw PrintfPar,r1 addi r14,r0,PrintfPar trap 5 ;*** call Trap-3 to read line addi r14,r0,ReadPar trap 3 ;*** determine value addi r2,r0,ReadBuffer addi r1,r0,0 addi r4,r0,10 ;Decimal system Loop: ;*** reads digits to end of line lbu r3,0(r2) seqi r5,r3,10 ;LF -> Exit bnez r5,Finish subi r3,r3,48 ;ґ0ґ multu r1,r1,r4 ;Shift decimal add r1,r1,r3 addi r2,r2,1 ;increment pointer j Loop Finish: ;*** restore old register contents lw r2,SaveR2 lw r3,SaveR3 lw r4,SaveR4 lw r5,SaveR5 jr r31 ; Return  Рис.1 Вікно конвеєра   Рис.3 Вікно введення/виведення Рис.2 Вікно статистики Як бачимо, було виконано 57 інструкцій, на що пішло 88 циклів (CPI=1.54). Відбулося 10 RAW пригальмовування конвеєра, 8 пригальмовувань керування і 12 пригальмовувань зупинки (trap stalls). Всього зупинок конвеєра 30 Модифікована (оптимізована) версія програми .data Prompt: .asciiz "An integer value >1 : " PrintfFormat:.asciiz "Factorial = %g\n\n" .align 2 PrintfPar: .word PrintfFormat PrintfValue: .space 8 ;*** Data for Read-Trap ReadBuffer: .space 80 ReadPar: .word 0,ReadBuffer,80 PrintfPar1: .space 4 .text .global main main: ;*** Read value from stdin into R1 addi r1,r0,Prompt jal InputUnsigned ;*** init values movi2fp f10,r1 ;R1 -> D0 D0..Count register cvti2d f0,f10 addi r2,r0,1 ;1 -> D2 D2..result movi2fp f11,r2 cvti2d f2,f11 movd f4,f2 ;1-> D4 D4..Constant 1 ;*** Break loop if D0 = 1 Loop: led f0,f4 ;D0<=1 ? bfpt Finish ;*** Multiplication and next loop multd f2,f2,f0 subd f0,f0,f4 j Loop InputUnsigned: ;*** Prompt sw PrintfPar1,r1 addi r14,r0,PrintfPar1 trap 5 ;*** call Trap-3 to read line addi r14,r0,ReadPar trap 3 ;*** determine value addi r2,r0,ReadBuffer addi r1,r0,0 addi r4,r0,10 ;Decimal system Loop1: ;*** reads digits to end of line lbu r3,0(r2) nop seqi r5,r3,10 ;LF -> Exit nop bnez r5,Exit multu r1,r1,r4 ;Shift decimal nop subi r3,r3,48 nop addi r2,r2,1 ;increment pointer add r1,r1,r3 j Loop1 Exit: jr r31 ; Return Finish: ;*** write result to stdout sd PrintfValue,f2 addi r14,r0,PrintfPar trap 5 trap 0  Рис.3 Вікно конвеєра Рис.4 Вікно статистики Було виконано 55 інструкцій, на що пішло 79 циклів (CPI=1.43) Не відбулося жодного RAW пригаль...
Антиботан аватар за замовчуванням

19.12.2013 22:12

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Завантаження файлу

Якщо Ви маєте на своєму комп'ютері файли, пов'язані з навчанням( розрахункові, лабораторні, практичні, контрольні роботи та інше...), і Вам не шкода ними поділитись - то скористайтесь формою для завантаження файлу, попередньо заархівувавши все в архів .rar або .zip розміром до 100мб, і до нього невдовзі отримають доступ студенти всієї України! Ви отримаєте грошову винагороду в кінці місяця, якщо станете одним з трьох переможців!
Стань активним учасником руху antibotan!
Поділись актуальною інформацією,
і отримай привілеї у користуванні архівом! Детальніше

Оголошення від адміністратора

Антиботан аватар за замовчуванням

пропонує роботу

Admin

26.02.2019 12:38

Привіт усім учасникам нашого порталу! Хороші новини - з‘явилась можливість кожному заробити на своїх знаннях та вміннях. Тепер Ви можете продавати свої роботи на сайті заробляючи кошти, рейтинг і довіру користувачів. Потрібно завантажити роботу, вказати ціну і додати один інформативний скріншот з деякими частинами виконаних завдань. Навіть одна якісна і всім необхідна робота може продатися сотні разів. «Головою заробляти» продуктивніше ніж руками! :-)

Новини